package com.itheima.search;

import com.itheima.dao.BookDao;
import com.itheima.dao.BookDaoImpl;
import com.itheima.pojo.Book;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class IndexManagerTest {
    @Test
    public void testCreateIndex() throws IOException {
        //1、采集数据
        BookDao bookDao = new BookDaoImpl();
        List<Book> bookList = bookDao.queryBookList();

        //2、创建文档对象
        List<Document> docList = new ArrayList<Document>();
        for (Book book : bookList) {
            Document doc = new Document();
            /**
             * IntField整型类型域，TextField文本类型域，FloatField浮点型类型域
             * 参数1：域名--对应数据库中字段名
             * 参数2：域值
             * 参数3：是否存储--是否需要将该域对应的值存储到文档中
             */
            /**
             * 图书id
             * 是否分词:不需要分词
             * 是否索引:需要索引
             * 是否存储:需要存储
             */
            doc.add(new StringField("bookId", book.getId()+"", Field.Store.YES));

            /**
             * 图书名称
             * 是否分词:需要分词
             * 是否索引:需要索引
             * 是否存储:需要存储
             * TextField
             */
            doc.add(new TextField("bookName", book.getBookname(), Field.Store.YES));

            /**
             * 图书价格
             * 是否分词:(lucene对于数值型的Field,使用内部分词)
             * 是否索引:需要索引
             * 是否存储:需要存储
             * DoubleField
             */

            doc.add(new FloatField("bookPrice", Float.parseFloat(book.getPrice()+""), Field.Store.YES));

            /**
             * 图书图片
             * 是否分词:不需要分词
             * 是否索引:不需要索引
             * 是否村粗:需要存储
             * StoreField
             */
            doc.add(new StoredField("bookPic", book.getPic()));
//            doc.add(new TextField("bookDesc", book.getBookdesc(), Field.Store.YES));

            /**
             * 图书描述
             * 是否分词:需要分词
             * 是否索引:需要索引
             * 是否存储:不需要存储
             * TextField
             */

            doc.add(new TextField("bookDesc",book.getBookdesc(),Field.Store.YES));
            docList.add(doc);
        }
        //3.创建分词器analyzer
//        StandardAnalyzer analyzer = new StandardAnalyzer();
        Analyzer analyzer = new IKAnalyzer();
        //4.创建文档索引配置对象IndexWriterConfig
        IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer);
        //5.创建存放索引目录Directory,指定索引存放路径
        File file = new File("D:\\com\\lucene");
        FSDirectory open = FSDirectory.open(file);

        //6创建索引编写器IndexWriter
        IndexWriter indexWriter = new IndexWriter(open, indexWriterConfig);
        //7.利用索引编写器写入到文档索引目录
        for (Document document : docList) {
            //把文档对象写入到索引库中
            indexWriter.addDocument(document);
        }
        //8、释放资源
        indexWriter.close();
    }
}
